Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Windows.Forms

Partial Public Class FrmProducto
    Inherits Form
    Dim daoProd As New DAOProducto
    Dim operacion As accion
    Dim acceso As New acceso_a_datos(acceso_a_datos.motores.sqlserver)
    Dim combo As New carga_combo
    Dim ventanapadre As Form
    Dim vengoDesdeMenuPrincipal As Boolean 'variable q me dice si vengo desde un form o desde el menu ppal
    Dim id_produc As Integer


    Public Sub New()
        InitializeComponent()
        cargarComboRubro() 'ver xq no anda
        cargarComboUM()
        cargarGrillaProd()
        vengoDesdeMenuPrincipal = True
        operacion = accion.insertar
        'deshabilitarCombos()
    End Sub

    Public Sub New(ByRef ventana As Form)
        InitializeComponent()
        Me.ventanaPadre = ventana
        Me.ventanaPadre.Enabled = False
        Me.Focus()
        vengoDesdeMenuPrincipal = False
        operacion = accion.insertar
    End Sub

    Private Sub btnAgregarUbic_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_agregar_rubro.Click
        Dim gene As New FrmRubro(Me)
        Me.Enabled = False
        gene.ShowDialog()
        cargarComboRubro()
    End Sub

    Enum accion 'tipificacion de estado de la operacion en curso
        insertar
        modificar
    End Enum

    Private Sub btnInsertarUni_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_agregar_um.Click
        Dim gene As New FrmUnidadMedida(Me)
        Me.Enabled = False
        gene.ShowDialog()
        cargarComboUM()
    End Sub

    Private Sub txtStockMin_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles txt_stock_real.KeyPress, txt_pto_repo.KeyPress, txt_precio.KeyPress
        If [Char].IsDigit(e.KeyChar) Then
            e.Handled = False
        ElseIf [Char].IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf [Char].IsSeparator(e.KeyChar) Then
            e.Handled = False
        Else
            e.Handled = True
        End If
    End Sub

    Private Sub btnAceptar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAceptar.Click
        If txt_producto.Text = "" Then
            MessageBox.Show("Debe ingresar el nombre del producto")
            Return
        End If
        If txt_codigo.Text = "" Then
            MessageBox.Show("Debe ingresar un código al producto")
            Return
        End If
        If operacion = accion.insertar Then
            If guardarProducto() = True Then
                MessageBox.Show("Producto guardado")
                limpiarForm()
                cargarGrillaProd()
            Else
                MessageBox.Show("producto no guardado")
                Return
            End If

        ElseIf operacion = accion.modificar Then
            If daoProd.ActualizarProducto(id_produc, objetoProducto()) = True Then
                MessageBox.Show("Producto actualizado")
                limpiarForm()
                cargarGrillaProd()
            Else
                MessageBox.Show("Producto no modificado")
                limpiarForm()
            End If

        End If

        

    End Sub

    Private Function guardarProducto() As Boolean
        Dim prod As New negProducto()
        prod.nombre = txt_producto.Text
        prod.codigo = txt_codigo.Text
        prod.descrip = txt_observ.Text
        prod.idRubro = cmb_rubro.SelectedIndex + 1
        prod.idUnidMed = cmb_unidades.SelectedIndex + 1
        prod.precio = txt_precio.Text
        prod.cantStock = txt_stock_real.Text
        prod.ptoRepo = txt_pto_repo.Text
        Dim bandera As Boolean = False
        bandera = daoProd.DAOInsertarProductos(prod)
        Return bandera
    End Function

    Private Function objetoProducto() As NegProducto
        Dim prod As New NegProducto()
        prod.idProducUM = id_produc
        prod.nombre = txt_producto.Text
        prod.codigo = txt_codigo.Text
        prod.descrip = txt_observ.Text
        prod.idRubro = cmb_rubro.SelectedIndex + 1
        prod.idUnidMed = cmb_unidades.SelectedIndex + 1
        prod.precio = txt_precio.Text
        prod.cantStock = txt_stock_real.Text
        prod.ptoRepo = txt_pto_repo.Text

        Return prod
    End Function

    'cargo combo de rubros
    Private Sub cargarComboRubro()
        acceso._tabla = "T_RUBROS"
        combo.cargar(cmb_rubro, acceso.leo_tabla(), "ID_RUBRO", "NOMBRE")
        cmb_rubro.SelectedIndex = -1

    End Sub
    'cargo combo de UM
    Private Sub cargarComboUM()
        acceso._tabla = "T_UNIDADES_MEDIDA"
        combo.cargar(cmb_unidades, acceso.leo_tabla(), "ID_UNIDAD_MEDIDA", "NOMBRE")
        cmb_unidades.SelectedIndex = -1
    End Sub

    Private Sub cargarGrillaProd()
        grid_productos.DataSource = daoProd.cargarGrillaProductos()
    End Sub

    Private Sub deshabilitarCombos()
        btnAceptar.Enabled = False
        cmb_rubro.Enabled = False
        cmb_unidades.Enabled = False
        txt_observ.Enabled = False
        txt_pto_repo.Enabled = False
        txt_stock_real.Enabled = False
        txt_precio.Enabled = False
    End Sub

    Private Sub habiilitarCombos()
        btnAceptar.Enabled = True
        cmb_rubro.Enabled = True
        cmb_unidades.Enabled = True
        txt_observ.Enabled = True
        txt_pto_repo.Enabled = True
        txt_stock_real.Enabled = True
        txt_precio.Enabled = True
    End Sub

    Private Sub limpiarForm()
        txt_observ.Text = ""
        txt_pto_repo.Text = ""
        txt_stock_real.Text = ""
        txt_precio.Text = ""
    End Sub

    Private Sub btnNuevo_Click(ByVal sender As Object, ByVal e As EventArgs)
        habiilitarCombos()
    End Sub

    Private Sub txt_producto_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_producto.TextChanged
        grid_productos.DataSource = daoProd.buscarProductoXNombre(txt_producto.Text) 'voy filtrando en la grilla a medida que inserta el nombre
        lbl_mensaje.Text = ""
        If grid_productos.Rows.Count = 0 Then
           operacion = accion.insertar
        Else
            operacion = accion.modificar
        End If
    End Sub

    Private Sub txt_codigo_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_codigo.TextChanged
        grid_productos.DataSource = daoProd.buscarProductoXCodigo(txt_codigo.Text) 'voy filtrando en la grilla a medida que inserta el codigo
        If grid_productos.Rows.Count = 0 Then
            operacion = accion.insertar
        Else
            operacion = accion.modificar
        End If
    End Sub

    Private Sub grid_productos_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grid_productos.CellDoubleClick
        operacion = accion.modificar
        txt_producto.Focus()
        id_produc = Integer.Parse(grid_productos.CurrentRow.Cells(0).Value.ToString())
        txt_codigo.Text = Me.grid_productos.CurrentRow.Cells("codigo").Value
        txt_producto.Text = Me.grid_productos.CurrentRow.Cells("nombrePr").Value
        cmb_rubro.SelectedIndex = Me.grid_productos.CurrentRow.Cells("idRubro").Value - 1
        cmb_unidades.SelectedIndex = Me.grid_productos.CurrentRow.Cells("id_um").Value - 1
        Dim prod As New NegProducto
        prod = daoProd.buscarProductoPK(id_produc)
        txt_pto_repo.Text = prod.ptoRepo
        txt_stock_real.Text = prod.cantStock
        txt_precio.Text = prod.precio
    End Sub

    Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click
        If vengoDesdeMenuPrincipal = True Then 'si vengo desde el menu ppal solo cierro la ventana
            Me.Dispose()
        Else 'si vengo de un form distinto al ppal
            Me.Dispose()  'cierra el formulario
            ventanapadre.Enabled = True 'Habilita el form principal
            ventanapadre.Focus()        'y le hace foco
        End If
    End Sub
End Class
